package bebetes;

import java.awt.Color;

import junit.framework.TestCase;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Classe testant le comportement hasard
 *
 */
public class ComportementHasardTest extends TestCase{

	static int largeur = 200;
	static int hauteur = 200;
	static int x1 = 50;
	ChampDeBebetes champ;
	BebeteConcrete pelican;
	Comportement compHas = ComportementHasard.getComportement();
	Color couleur;
	FabriquePlugins plugFacto;
	
	/**
	 * Initialisation du test en creant une bebete appelee pelican
	 * avec un comportement "hasard" la faisant se deplacer aleatoirement
	 * et rebondir sur les cotes du champ
	 */
	@Before
	public void setUp() throws Exception {
		couleur = new Color(0.5f,0.5f,0.5f);
		FabriqueEntites.init(FabriquePlugins.class);
		plugFacto = (FabriquePlugins)FabriqueEntites.getFabriqueEntites();
		champ = plugFacto.creeChampDeBebetes(largeur, hauteur, 1234);
		pelican = (BebeteConcrete) plugFacto.creeBebete(champ, x1, x1, (float) (Math.PI/2), 2, couleur, compHas, null);
		champ.setNombreDeBebetes(champ.getNombreDeBebetes()+1);
	}
	
	@After
	public void tearDown() throws Exception {
		champ = null;
		plugFacto = null;
		pelican = null;
		FabriqueEntites.delete();
		
	}
	
	/**
	 * Verifie le calcul du deplacement du pelican
	 */
	@Test
	public void testCalculDeplacementAFaire() {
		
		float vit = pelican.getVitesseCourante();
		float dir = pelican.getDirectionCourante();
		pelican.getComportementNormal().calculeDeplacementAFaire(pelican);
		assertTrue(vit*0.3 != pelican.getVitesseCourante() || dir != pelican.getDirectionCourante());
		
	}
	
	/**
	 * Verifie que le pelican s'est bien deplace
	 */
	@Test
	public void testEffectueDeplacement() {
		
		int tempX = pelican.getX();
		int tempY = pelican.getY();
		
		pelican.getComportementNormal().effectueDeplacement(pelican);
		
		assertTrue(tempX != pelican.getX() || tempY != pelican.getY());
	}
	
	/**
	 * Verifie que le pelican perds de l'energie
	 */
	@Test
	public void testAgit() {
		int en = pelican.getEnergie();
		
		pelican.getComportementNormal().agit(pelican);
		
		assertTrue(en != pelican.getEnergie());
		
	}
}
